11. CharRNN Solution
07 CharRNN Solution V1
表示记忆功能
你已经知道 RNN 适合序列数据,因为它们具有记忆功能。我们用隐藏状态表示这种记忆功能。
在字符级 LSTM 示例中,每个 LSTM 单元除了将字符当做输入并生成输出字符之外,还具有隐藏状态,每个单元都会将其隐藏状态传递给下个单元。
这种连接就形成了记忆功能,一系列单元能够记住它们见过的字符,并根据该信息预测下个字符。
例如,如果单元生成了字符 a
,则不太可能在此字符之后又生成另一个 a
。
net.eval()
上述代码缺少 net.eval()
。
net.eval(
) 会将模型中的所有层级设为评估模式。这样会影响到丢弃层等层级,因为丢弃层会在训练期间按照某个概率“关闭”节点。但在测试或预测时,会“打开”所有节点。所以在测试或验证模型之前,以及在抽样和预测给定序列中的下个潜在字符之前,应该模型设为评估模式,我将仅在训练循环期间将模型设为 net.train()
(训练模式)。
这一点体现在了之前的 notebook 代码和此 Github 代码库中。